/**
 spring cloud 为开发人员提供了快速构建分布式系统的一些工具，
 包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单，
 可以在开发人员的电脑上跑。另外说明spring cloud是基于springboot的，所以需要开发中对springboot有一定的了解，
 在微服务架构中，业务都会被拆分成一个独立的服务，服务与服务的通讯是基于http restful的。
 Spring cloud有两种服务调用方式，一种是ribbon+restTemplate，另一种是feign
 一、ribbon简介
 Ribbon is a client side load balancer which gives you a lot of control over the behaviour of HTTP and TCP clients.
 Feign already uses Ribbon,
 so if you are using @FeignClient then this section also applies.
 —–摘自官网
 ribbon是一个负载均衡客户端，可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon。
 */
package com.zntg;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.zntg.bo.FundFeneSureBook;
import com.zntg.contants.FundFeneSureBookContants;
import com.zntg.pdf.CreatePdfUtilTemplate1;
import com.zntg.pdf.CreatePdfUtilTemplate2;
import com.zntg.utils.string.StringUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

/**
 * @Description: SpringCloud 教程 | 第二篇： 服务消费者(rest+ribbon)
 * 工程的启动类中,通过@EnableDiscoveryClient向服务中心注册；
 * 并且向程序的ioc注入一个bean: restTemplate;
 * 并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。
 * @Author: zhengyunfei qq群号:541122375
 * @Date: 2018/7/3
 * @time:10:36
 */
@SpringBootApplication
@EnableScheduling      //使能定时任务
@EnableEurekaClient
@RestController
public class ElectronicSignatureServiceHiApplication {

	public static void main(String[] args) {
		SpringApplication.run(ElectronicSignatureServiceHiApplication.class, args);
		System.out.println("生成认购书服务启动成功,同时定时从app文件服务器同步到crm文件服务器服务启动成功。。。。。");
	}
	@Value("${server.port}")
	String port;
	/**电子签章生成路径*/
	@Value("${template.targetPath}")
	String targetPath;
	@RequestMapping("/create")
	@ResponseBody
	public Object home(@RequestParam  String  jsonData ){
		System.out.println("从报表平台手动生成认购书服务开始启动。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。");
		//生成电子签章
		String resultJson="";
		try {
			System.out.println("传递来的参数为jsonData==============="+jsonData);
			//将json转换为list
			Gson gson=new Gson();
			List <FundFeneSureBook> list=gson.fromJson(jsonData,new TypeToken<List<FundFeneSureBook>>(){}.getType());
			List <FundFeneSureBook> result=new ArrayList<>();
			if(null!=list){
				for(int i=0;i<list.size();i++){
					FundFeneSureBook fundFeneSureBook=list.get(i);
					String cyType=fundFeneSureBook.getCyType();
                    if(!StringUtil.isNullOrEmpty(cyType)){
					    System.out.println("确认书类型========================="+cyType);
                        if(FundFeneSureBookContants.CON_TYP_STATUS_01.equals(cyType)){
                            //fundFeneSureBook.setSourcePath(shenGouSourcePath);
                            fundFeneSureBook.setTargetPath(targetPath);
                        }
                        if(FundFeneSureBookContants.CON_TYP_STATUS_02.equals(cyType)){
                            //fundFeneSureBook.setSourcePath(zhuiJiaSourcePath);
                            fundFeneSureBook.setTargetPath(targetPath);
                        }
					    //只有cyType不能空的情况下才生成认购书，cyType=01代表申购书，等于02代表追加书
                        System.out.println("SourcePath========================="+fundFeneSureBook.getSourcePath());
                        System.out.println("targetPath========================="+fundFeneSureBook.getTargetPath());
                        FundFeneSureBook resultBo= CreatePdfUtilTemplate1.createPdf(fundFeneSureBook);
                        result.add(resultBo);
                    }


				}
				resultJson=gson.toJson(result);
			}

		}catch (Exception e){
			e.printStackTrace();
		}

		return resultJson;
	}

	@RequestMapping("/createSignFeiJingZhiProd")
	@ResponseBody
	public Object createSignFeiJingZhiProd(String  jsonData ){
		System.out.println("ElectronicSignatureServiceHiApplication非净值类产品生成认购书服务开始启动。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。");
		//生成电子签章
		String resultJson="";
		try {
			//System.out.println("传递来的参数为jsonData==============="+jsonData);
			if (StringUtil.isNullOrEmpty(jsonData)) {
				System.out.println("传递来的参数为jsonData==============="+jsonData);
			}
			//将json转换为list
			Gson gson=new Gson();
			List <FundFeneSureBook> list=gson.fromJson(jsonData,new TypeToken<List<FundFeneSureBook>>(){}.getType());
			List <FundFeneSureBook> result=new ArrayList<>();
			if(null!=list){
				for(int i=0;i<list.size();i++){
					FundFeneSureBook fundFeneSureBook=list.get(i);
					String cyType=fundFeneSureBook.getCyType();
					fundFeneSureBook.setTargetPath(targetPath);
					FundFeneSureBook resultBo= CreatePdfUtilTemplate2.createPdf(fundFeneSureBook);
					result.add(resultBo);
				}
				resultJson=gson.toJson(result);
			}

		}catch (Exception e){
			e.printStackTrace();
		}

		return resultJson;
	}
	//智能投顾后台份额确认生成书生产接口
	@RequestMapping(value = "/createSign",method = RequestMethod.POST)
	@ResponseBody
	public Object create(FundFeneSureBook fundFeneSureBook){
		//
		Gson gson=new Gson();
		String jsonData=gson.toJson(fundFeneSureBook);
		System.out.println("传递来的参数为jsonData==============="+jsonData);
		try {
			fundFeneSureBook.setTargetPath(targetPath);
			CreatePdfUtilTemplate1.createPdf(fundFeneSureBook);
		}catch (Exception e){
			e.printStackTrace();
		}
		return fundFeneSureBook;
	}

}
